home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Skunkware 5
/
Skunkware 5.iso
/
man
/
cat.n
/
trace.n
< prev
next >
Wrap
Text File
|
1995-07-25
|
10KB
|
198 lines
ttttrrrraaaacccceeee((((nnnn)))) TTTTccccllll (((( )))) ttttrrrraaaacccceeee((((nnnn))))
_________________________________________________________________
NNNNAAAAMMMMEEEE
trace - Monitor variable accesses
SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS
ttttrrrraaaacccceeee _o_p_t_i_o_n ?_a_r_g _a_r_g ...?
_________________________________________________________________
DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
This command causes Tcl commands to be executed whenever
certain operations are invoked. At present, only variable
tracing is implemented. The legal _o_p_t_i_o_n's (which may be
abbreviated) are:
ttttrrrraaaacccceeee vvvvaaaarrrriiiiaaaabbbblllleeee _n_a_m_e _o_p_s _c_o_m_m_a_n_d
Arrange for _c_o_m_m_a_n_d to be executed whenever variable
_n_a_m_e is accessed in one of the ways given by _o_p_s. _N_a_m_e
may refer to a normal variable, an element of an array,
or to an array as a whole (i.e. _n_a_m_e may be just the
name of an array, with no parenthesized index). If
_n_a_m_e refers to a whole array, then _c_o_m_m_a_n_d is invoked
whenever any element of the array is manipulated.
_O_p_s indicates which operations are of interest, and
consists of one or more of the following letters:
rrrr Invoke _c_o_m_m_a_n_d whenever the variable is read.
wwww Invoke _c_o_m_m_a_n_d whenever the variable is
written.
uuuu Invoke _c_o_m_m_a_n_d whenever the variable is
unset. Variables can be unset explicitly
with the uuuunnnnsssseeeetttt command, or implicitly when
procedures return (all of their local
variables are unset). Variables are also
unset when interpreters are deleted, but
traces will not be invoked because there is
no interpreter in which to execute them.
When the trace triggers, three arguments are appended
to _c_o_m_m_a_n_d so that the actual command is as follows:
_c_o_m_m_a_n_d _n_a_m_e_1 _n_a_m_e_2 _o_p
_N_a_m_e_1 and _n_a_m_e_2 give the name(s) for the variable being
accessed: if the variable is a scalar then _n_a_m_e_1 gives
the variable's name and _n_a_m_e_2 is an empty string; if
the variable is an array element then _n_a_m_e_1 gives the
name of the array and name2 gives the index into the
array; if an entire array is being deleted and the
Page 1 (printed 7/17/95)
ttttrrrraaaacccceeee((((nnnn)))) TTTTccccllll (((( )))) ttttrrrraaaacccceeee((((nnnn))))
trace was registered on the overall array, rather than
a single element, then _n_a_m_e_1 gives the array name and
_n_a_m_e_2 is an empty string. _O_p indicates what operation
is being performed on the variable, and is one of rrrr, wwww,
or uuuu as defined above.
_C_o_m_m_a_n_d executes in the same context as the code that
invoked the traced operation: if the variable was
accessed as part of a Tcl procedure, then _c_o_m_m_a_n_d will
have access to the same local variables as code in the
procedure. This context may be different than the
context in which the trace was created. If _c_o_m_m_a_n_d
invokes a procedure (which it normally does) then the
procedure will have to use uuuuppppvvvvaaaarrrr or uuuupppplllleeeevvvveeeellll if it
wishes to access the traced variable. Note also that
_n_a_m_e_1 may not necessarily be the same as the name used
to set the trace on the variable; differences can
occur if the access is made through a variable defined
with the uuuuppppvvvvaaaarrrr command.
For read and write traces, _c_o_m_m_a_n_d can modify the
variable to affect the result of the traced operation.
If _c_o_m_m_a_n_d modifies the value of a variable during a
read or write trace, then the new value will be
returned as the result of the traced operation. The
return value from _c_o_m_m_a_n_d is ignored except that if it
returns an error of any sort then the traced operation
also returns an error with the same error message |
returned by the trace command (this mechanism can be
used to implement read-only variables, for example).
For write traces, _c_o_m_m_a_n_d is invoked after the
variable's value has been changed; it can write a new
value into the variable to override the original value
specified in the write operation. To implement read-
only variables, _c_o_m_m_a_n_d will have to restore the old
value of the variable.
While _c_o_m_m_a_n_d is executing during a read or write
trace, traces on the variable are temporarily disabled.
This means that reads and writes invoked by _c_o_m_m_a_n_d
will occur directly, without invoking _c_o_m_m_a_n_d (or any
other traces) again. However, if _c_o_m_m_a_n_d unsets the |
variable then unset traces will be invoked.
When an unset trace is invoked, the variable has
already been deleted: it will appear to be undefined
with no traces. If an unset occurs because of a
procedure return, then the trace will be invoked in the
variable context of the procedure being returned to:
the stack frame of the returning procedure will no
longer exist. Traces are not disabled during unset
traces, so if an unset trace command creates a new
Page 2 (printed 7/17/95)
ttttrrrraaaacccceeee((((nnnn)))) TTTTccccllll (((( )))) ttttrrrraaaacccceeee((((nnnn))))
trace and accesses the variable, the trace will be
invoked. Any errors in unset traces are ignored. |
If there are multiple traces on a variable they are
invoked in order of creation, most-recent first. If
one trace returns an error, then no further traces are
invoked for the variable. If an array element has a
trace set, and there is also a trace set on the array
as a whole, the trace on the overall array is invoked
before the one on the element.
Once created, the trace remains in effect either until
the trace is removed with the ttttrrrraaaacccceeee vvvvddddeeeelllleeeetttteeee command
described below, until the variable is unset, or until
the interpreter is deleted. Unsetting an element of
array will remove any traces on that element, but will
not remove traces on the overall array.
This command returns an empty string.
ttttrrrraaaacccceeee vvvvddddeeeelllleeeetttteeee _n_a_m_e _o_p_s _c_o_m_m_a_n_d
If there is a trace set on variable _n_a_m_e with the
operations and command given by _o_p_s and _c_o_m_m_a_n_d, then
the trace is removed, so that _c_o_m_m_a_n_d will never again
be invoked. Returns an empty string.
ttttrrrraaaacccceeee vvvviiiinnnnffffoooo _n_a_m_e
Returns a list containing one element for each trace
currently set on variable _n_a_m_e. Each element of the
list is itself a list containing two elements, which
are the _o_p_s and _c_o_m_m_a_n_d associated with the trace. If
_n_a_m_e doesn't exist or doesn't have any traces set, then
the result of the command will be an empty string.
KKKKEEEEYYYYWWWWOOOORRRRDDDDSSSS
read, variable, write, trace, unset
Page 3 (printed 7/17/95)